package com.ruoyi.system.repository;

import com.ruoyi.common.core.BaseRepository;
import com.ruoyi.common.core.domain.entity.SysDept;
import org.springframework.data.repository.NoRepositoryBean;

import java.util.List;

@SuppressWarnings("UnusedReturnValue")
@NoRepositoryBean
public interface SysDeptRepository extends BaseRepository<SysDept, Long> {
	/**
	 * 查询部门管理数据
	 *
	 * @param dept 部门信息
	 * @return 部门信息集合
	 */
	List<SysDept> selectDeptList(SysDept dept);

	/**
	 * 根据角色ID查询部门树信息
	 *
	 * @param roleId 角色ID
	 * @return 选中部门列表
	 */
	List<Long> selectDeptListByRoleId(Long roleId);

	/**
	 * 根据部门ID查询信息
	 *
	 * @param deptId 部门ID
	 * @return 部门信息
	 */
	SysDept selectDeptById(Long deptId);

	/**
	 * 根据ID查询所有子部门
	 *
	 * @param deptId 部门ID
	 * @return 部门列表
	 */
	List<SysDept> selectChildrenDeptById(Long deptId);

	/**
	 * 根据ID查询所有子部门（正常状态）
	 *
	 * @param deptId 部门ID
	 * @return 子部门数
	 */
	int selectNormalChildrenDeptById(Long deptId);

	/**
	 * 是否存在子节点
	 *
	 * @param deptId 部门ID
	 * @return 结果
	 */
	long hasChildByDeptId(Long deptId);

	/**
	 * 查询部门是否存在用户
	 *
	 * @param deptId 部门ID
	 * @return 结果
	 */
	long checkDeptExistUser(Long deptId);

	/**
	 * 校验部门名称是否唯一
	 *
	 * @param deptName 部门名称
	 * @param parentId 父部门ID
	 * @return 结果
	 */
	SysDept checkDeptNameUnique(String deptName, Long parentId);

	/**
	 * 修改所在部门正常状态
	 *
	 * @param deptIds 部门ID组
	 */
	void updateDeptStatusNormal(Long[] deptIds);

	int updateDept(SysDept dept);
}
